#include <iostream>
#include <thread>
#include <pthread.h>
#include <unistd.h>
#include <string>
#include <string.h>

// //C++11的线程
// int main()
// {
//     std::thread t([](){
//         while(1)
//         {
//             std::cout << "我是新线程" << std::endl;
//             sleep(1);
//         }
//     });
//     while(1)
//     {
//         std::cout << "我是主线程" << std::endl;
//         sleep(1);
//     }
//     return 0;
// }

std::string zhh(pthread_t id)
{
    char buff[64];
    snprintf(buff, sizeof(buff), "%lx", id);
    return buff;
}

int gun = 0;


class threaddata
{
public:
    void init(const std::string &name,int a,int b)
    {
        _name=name;
        _a = a;
        _b = b;
    }

    void exe()
    {
        _ret = _a + _b;
    }
    int Ret()
    {
        return 
        _ret;
    }
    std::string Name()
    {
        return _name;
    }
    ~threaddata()
    {

    }
private:
    std::string _name;
    int _a;
    int _b;
    int _ret;
};



void *run1(void *s)
{
    // 转换成字符串
    threaddata* td = static_cast<threaddata*>(s);
    while (1)
    {
        std::cout << "我是一个新线程:名称：" << td->Name() << "新线程id:" << zhh(pthread_self()) << std::endl;
        gun++;
        td->exe();
        sleep(1);
        break;
    }
    return (void*)td;
}
void *run2(void *s)
{
    // 转换成字符串
    std::string name = static_cast<const char *>(s);
    while (1)
    {
        std::cout << "我是一个新线程:名称：" << name << "新线程id:" << zhh(pthread_self()) << std::endl;
        std::cout << "gun:" << gun << std::endl;
        sleep(1);
        // int* p = nullptr;
        // *p = 10;
    }
    return (void*)10;
}

// int main()
// {
//     pthread_t id1;
//     threaddata* td = new threaddata("run-1",10,20);
//     pthread_create(&id1, nullptr, run1, td);
//     // pthread_t id2;
//     // pthread_create(&id2, nullptr, run2, (void *)"run-2");
    
//     threaddata* ret = nullptr;
//     int n = pthread_join(id1,(void**)&ret);
//     if(n != 0)
//     {
//         std::cout << "错误码："<< n << "," << strerror(n) << std::endl;
//         return 1;
//     }
//     std::cout << "等待成功,ret：" << ret->Ret() << std::endl;

//     // pthread_t id3;
//     // pthread_create(&id3, nullptr, run, (void *)"run-1");
//     // pthread_t id4;
//     // pthread_create(&id4, nullptr, run, (void *)"run-1");

//    // printf("线程tid:0x%lx\n", id);
//     // if (n != 0)
//     // {
//     //     std::cout << "pthread_create错误" << std::endl;
//     // }

//     // while (1)
//     // {
//     //     std::cout << "我是主线程" << std::endl;
//     //     sleep(1);
//     // }
//     delete td;
//     return 0;
// }